package config

// 全局复用数据库
// db := config.GetDB()

import (
	"fmt"
	"log"
	"sync"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

var (
	db        *gorm.DB
	MySQlOnce sync.Once
)

// 数据库配置项（可根据需要抽离到 config.yaml 或 .env）
const (
	dbUser     = "lml"
	dbPassword = "LMLlml062424"
	dbHost     = "rm-cn-m1e4ah63c0002uso.rwlb.rds.aliyuncs.com"
	dbPort     = "3306"
	dbName     = "g-im-chat"
)

// 初始化数据库连接（仅初始化一次）
func InitMySQL() {
	MySQlOnce.Do(func() {
		dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
			dbUser, dbPassword, dbHost, dbPort, dbName)

		var err error
		db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
			Logger: logger.Default.LogMode(logger.Info), // 可调级别：Silent, Error, Warn, Info
		})
		if err != nil {
			log.Fatalf("❌ MySQL 连接失败: %v", err)
		}

		sqlDB, err := db.DB()
		if err != nil {
			log.Fatalf("❌ 获取底层 sql.DB 失败: %v", err)
		}

		// 设置连接池参数
		sqlDB.SetMaxOpenConns(100)
		sqlDB.SetMaxIdleConns(10)
		sqlDB.SetConnMaxLifetime(30 * time.Minute)

		log.Println("✅ MySQL 初始化成功")
	})
}

// 获取全局数据库连接实例
func GetDB() *gorm.DB {
	if db == nil {
		log.Fatal("未初始化数据库，请先调用 InitMySQL()")
	}
	return db
}
